//
//  NSString+Extension.m
//  GTMC_CarOwner_Yonyou
//
//  Created by hongw on 16/4/18.
//  Copyright © 2016年 zgq. All rights reserved.
//

#import "NSString+Extension.h"

@implementation NSString (Extension)

- (NSString *)dateStringFromFormat:(NSString *)fromFormat toFormat:(NSString *)toFormat{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = fromFormat;
    NSDate *date = [formatter dateFromString:self];
    formatter.dateFormat = toFormat;
    return [formatter stringFromDate:date];
}

- (CGSize)getSizeWithFontSize:(UIFont *)fontSize
                     maxWidth:(CGFloat)maxWidth {
    return [self boundingRectWithSize:CGSizeMake(maxWidth, MAXFLOAT)
                              options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                           attributes:@{NSFontAttributeName: fontSize}
                              context:nil].size;
}

- (CGSize)getSizeWithFontSize:(UIFont *)fontSize
                    maxHeight:(CGFloat)maxHeight {
    return [self boundingRectWithSize:CGSizeMake(MAXFLOAT, maxHeight)
                              options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                           attributes:@{NSFontAttributeName: fontSize}
                              context:nil].size;
}

+(BOOL)isContainsEmoji:(NSString *)string {
    
    __block BOOL isEomji = NO;
    
    [string enumerateSubstringsInRange:NSMakeRange(0, [string length])options:NSStringEnumerationByComposedCharacterSequences usingBlock:
     
     ^(NSString *substring, NSRange substringRange, NSRange enclosingRange,BOOL *stop) {
         
         
         const unichar hs = [substring characterAtIndex:0];
         
         // surrogate pair
         
         if (0xd800 <= hs && hs <= 0xdbff) {
             
             if (substring.length > 1) {
                 
                 const unichar ls = [substring characterAtIndex:1];
                 
                 const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                 
                 if (0x1d000 <= uc && uc <= 0x1f77f) {
                     
                     isEomji = YES;
                     
                 }
                 
             }
             
         } else if (substring.length > 1) {
             
             const unichar ls = [substring characterAtIndex:1];
             
             if (ls == 0x20e3) {
                 
                 isEomji = YES;
                 
             }
             
             
             
         } else {
             
             // non surrogate
             
             if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) {
                 
                 isEomji = YES;
                 
             } else if (0x2B05 <= hs && hs <= 0x2b07) {
                 
                 isEomji = YES;
                 
             } else if (0x2934 <= hs && hs <= 0x2935) {
                 
                 isEomji = YES;
                 
             } else if (0x3297 <= hs && hs <= 0x3299) {
                 
                 isEomji = YES;
                 
             } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030|| hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50|| hs ==0x231a ) {
                 
                 isEomji = YES;
                 
             }
             
         }
         
     }];
    
    return isEomji;
}

+ (NSString *)disable_emoji:(NSString *)text
{
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]" options:NSRegularExpressionCaseInsensitive error:nil];
    NSString *modifiedString = [regex stringByReplacingMatchesInString:text
                                                               options:0
                                                                 range:NSMakeRange(0, [text length])
                                                          withTemplate:@""];
    return modifiedString;
}

+ (BOOL)isEmpty:(NSString *)str
{
    if (str == nil) {
        return YES;
    }
    
    if ((NSNull *) str == [NSNull null]) {
        return YES;
    }
    
    if ([str isEqual: @"(null)"]) {
        return YES;
    }
    
    if ([str isEqualToString:@"null"]) {
        return YES;
    }
    
    if ([str length] == 0) {
        return YES;
    }
    if ([[str stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
        return YES;
    }
    
    return NO;
}

+ (NSString *)vaildStringIsEmpty:(NSString *)str withReplaceStr:(NSString *)repStr;        // 如果是空则使用替换String
{
    if ([[self class] isEmpty:str]) {
        if (repStr == nil) {
            return @"";
        }else
            return repStr;
    }
    
    return str;
}

+ (NSInteger)chartLengthByString:(NSString*)str
{
    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
    NSData* da = [str dataUsingEncoding:enc];
    return [da length];
}

+ (NSAttributedString *)underStrikeLineAttributedWithString:(NSString *)str
{
    // 中划线
    NSDictionary *underlineAttribute = @{NSStrikethroughStyleAttributeName: @(NSUnderlineStyleSingle)};
    NSAttributedString * attributeString =
    [[NSAttributedString alloc] initWithString:str
                                    attributes:underlineAttribute];
    return attributeString;
}


- (BOOL) containsString: (NSString*) substring
{
    NSRange range = [self rangeOfString:substring];
    BOOL found = ( range.location != NSNotFound );
    return found;
}

+ (NSString*)changeUinicodeStringToNSString:(NSString*)unicodeStr{
    
    NSString *tempStr1 = [unicodeStr stringByReplacingOccurrencesOfString:@"\\u"withString:@"\\U"];
    NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\""withString:@"\\\""];
    NSString *tempStr3 = [[@"\""stringByAppendingString:tempStr2] stringByAppendingString:@"\""];
    NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];
    
    NSString* returnStr = [NSPropertyListSerialization propertyListWithData:tempData options:NSPropertyListImmutable format:NULL error:nil];
    return returnStr;
}

@end
